/*****************************************************************************************
 * ETS
 * 
 * Cours:		LOG121
 * Session:		A2013
 * Groupe:		04
 * Projet:		Laboratoire #3
 * �tudiants:	Frederic-Simon Mimeault
 * 				Francisco Felipe Quilodran
 * 
 * Professeur:	Francis Cardinal
 * 
 * Fichier:		CollectionJoueurs.java
 * Description:
 * 		Cette classe enregistre et gere une liste de joueurs. Elle fait tous les traitements 
 * interatives de la liste de joueur. 
 * Date de creation:	2013-11-01
 * Date dern. modif.:	2013-11-12
 * ****************************************************************************************
 * Historique des modifications
 * ****************************************************************************************
 * 2013-11-01 Version initiale
 * 2013-11-11 Impl�mentation des fonctions
 * 2013-11-12 Ajout de la documentation
 *****************************************************************************************/

package com.mq.etsmtl.framework;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;


public class CollectionJoueurs 
{
 //Map <NomJoueur,score>
/**
 * Liste de joueurs
 */
private List<Joueur> listeJoueurs;

/**
 * Constructeur avec un liste de noms passée en paramétre
 * @param nomJoueur est la liste de nom des joueurs a instantier
 * @throws NullPointerException lorsque la liste est égal à null
 */
public CollectionJoueurs(String[] nomJoueur)
 {
	if(nomJoueur!=null)
	{
	 listeJoueurs=new LinkedList<Joueur>();
	 for(String tmpNom: nomJoueur)
	 {
		this.ajouterJoueur(AbstractJoueurFactory.genererJoueur(tmpNom));
	 }
	}
    else throw new NullPointerException();
 }
 /**
  * public void ajouterJoueur(Joueur joueur) ajout un joueur à la liste seulement si le parametre d'entré 
  * est different de null et si la liste ne contient pas un joueur avec le même surnom
  * @param joueur à ajouter
  * @throws NullPointerException Lorsque joueur est égal à null
  */
 public void ajouterJoueur(Joueur joueur)
 {
	if (joueur!=null)
	{
		if(!listeJoueurs.contains(joueur))
		{
		  listeJoueurs.add(joueur);
		}
	}
	else throw new NullPointerException();
	
 } 
 /**
  * 
  * @return un tableau de int avec le nombre de points pour chaque joueur. 
  */
 public int[] getAllScores()
 { 
	 int[] tempListeScore=new int[listeJoueurs.size()];
	 for(int i=0;i<listeJoueurs.size();i++)
	 { 
		 tempListeScore[i]=listeJoueurs.get(i).getNbrePoints();
	 }
	 return tempListeScore;
 }
 /**
  * attribuerScore(String surnom, int score) augmentera le nombre de points du joueur seulement si le score est 
  * plus grand que 0
  * @param surnom du joueur
  * @param score nombre de point gagnés dans un tour
  * @throws NullPointerException Lorsque le surnom est égal à null
  * @see Joueur
  */
 public void attribuerScore(String surnom, int score)
 {
	 Iterator<Joueur> tmpIterator = this.getIterateurJoueur();
	 if(surnom!=null)
	 {
		 while(tmpIterator.hasNext())
		 {
			 Joueur tempJoueur=tmpIterator.next();
			 if(tempJoueur.getSurnom().equals(surnom))
			 {
				 tempJoueur.augmenterScore(score);
				 return;
			 }
		 }
	 }
	 else throw new NullPointerException();
 }
 /**
  * 
  * @return Iterateur de la liste de joueurs.
  */
 public Iterator<Joueur> getIterateurJoueur() 
 {
	return listeJoueurs.iterator();
 }
 /**
  * @return une liste de chaîne de caractères qui contient le surnom de chaque joueur existants
  */
 public String[] getNomsJoueurs()
 {
	 String[] listTemp = new String[listeJoueurs.size()];
	 for(int i=0;i<listeJoueurs.size();i++ )
	 {
		 listTemp[i]=listeJoueurs.get(i).getSurnom();
	 }
	 return listTemp;
 }
 /**
  * 
  * @return La quantité de joueurs existants
  */
 public int getNombreJoueurs()
 {
	 return listeJoueurs.size();
 }
		 
}
